package com.weaving.monitor.service;

import com.weaving.monitor.entity.StaffUserCard;
import com.weaving.monitor.entity.SysUser;
import com.weaving.monitor.mapper.StaffUserCardMapper;
import com.weaving.monitor.mapper.SysUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 工人姓名查询服务类
 * 
 * 功能说明：
 * 1. 提供通过工人卡号查询工人真实姓名的功能
 * 2. 实现卡号到用户ID再到真实姓名的转换逻辑
 * 3. 处理查询失败的情况，返回默认值
 * 
 * 注解说明：
 * - @Service: Spring注解，标识这是一个服务类
 * 
 * 方法说明：
 * - getWorkerNameByCardNumber: 根据卡号查询工人真实姓名
 * 
 * @author 系统开发团队
 * @version 1.0
 * @since 2024-01-01
 */
@Service
public class WorkerNameService {
    
    @Autowired
    private StaffUserCardMapper staffUserCardMapper;
    
    @Autowired
    private SysUserMapper sysUserMapper;
    
    /**
     * 根据卡号查询工人真实姓名
     * 
     * 功能说明：
     * 1. 通过工人卡号查询对应的真实姓名
     * 2. 实现两步查询：卡号->用户ID->真实姓名
     * 3. 处理查询失败的情况，返回默认值
     * 
     * 查询逻辑：
     * 1. 首先通过卡号查询staff_user_card表获取用户ID
     * 2. 然后通过用户ID查询sys_user表获取真实姓名
     * 3. 如果任何一步查询失败，返回默认值
     * 
     * 参数说明：
     * - cardNumber: 工人卡号
     * 
     * 返回值说明：
     * - String: 工人真实姓名
     * - 如果查询失败或卡号为空，返回"--"
     * 
     * 异常处理：
     * - 捕获所有异常，避免影响主业务流程
     * - 记录错误日志，便于问题排查
     * 
     * @param cardNumber 工人卡号
     * @return 工人真实姓名，查询失败时返回"--"
     */
    public String getWorkerNameByCardNumber(String cardNumber) {
        try {
            // 参数校验
            if (cardNumber == null || cardNumber.trim().isEmpty()) {
                return "--";
            }
            
            // 第一步：通过卡号查询用户ID
            StaffUserCard staffUserCard = staffUserCardMapper.selectByCardNumber(cardNumber.trim());
            if (staffUserCard == null || staffUserCard.getId() == null) {
                return "--";
            }
            
            // 第二步：通过用户ID查询真实姓名
            SysUser sysUser = sysUserMapper.selectById(staffUserCard.getId());
            if (sysUser == null || sysUser.getRealname() == null || sysUser.getRealname().trim().isEmpty()) {
                return "--";
            }
            
            return sysUser.getRealname().trim();
            
        } catch (Exception e) {
            // 记录错误日志，但不影响主业务流程
            System.err.println("查询工人姓名失败，卡号: " + cardNumber + ", 错误: " + e.getMessage());
            return "--";
        }
    }
    
    /**
     * 根据用户ID查询工人真实姓名
     * 
     * 功能说明：
     * 1. 通过用户ID直接查询sys_user表获取真实姓名
     * 2. 用于从staff_user_onboard表获取员工姓名
     * 
     * 查询逻辑：
     * 1. 通过用户ID查询sys_user表获取真实姓名
     * 2. 如果查询失败，返回默认值
     * 
     * 参数说明：
     * - userId: 用户ID
     * 
     * 返回值说明：
     * - String: 工人真实姓名
     * - 如果查询失败或用户ID为空，返回"--"
     * 
     * 异常处理：
     * - 捕获所有异常，避免影响主业务流程
     * - 记录错误日志，便于问题排查
     * 
     * @param userId 用户ID
     * @return 工人真实姓名，查询失败时返回"--"
     */
    public String getWorkerNameByUserId(String userId) {
        try {
            // 参数校验
            if (userId == null || userId.trim().isEmpty()) {
                return "--";
            }
            
            // 通过用户ID查询真实姓名
            SysUser sysUser = sysUserMapper.selectById(userId.trim());
            if (sysUser == null || sysUser.getRealname() == null || sysUser.getRealname().trim().isEmpty()) {
                return "--";
            }
            
            return sysUser.getRealname().trim();
            
        } catch (Exception e) {
            // 记录错误日志，但不影响主业务流程
            System.err.println("查询工人姓名失败，用户ID: " + userId + ", 错误: " + e.getMessage());
            return "--";
        }
    }
} 